package com.ljy.my_study.leetcode.回旋镖的数量;

import java.util.HashMap;
import java.util.Map;

/**
 * @author lijunying
 * @date 2021/9/13 9:54
 */
public class TestMain {

//    给定平面上 n 对 互不相同 的点 points ，其中 points[i] = [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 ，其中 i 和 j 之间的距离和 i 和 k 之间的距离相等（需要考虑元组的顺序）。
//
//    返回平面上所有回旋镖的数量。
//
//             
//    示例 1：
//
//    输入：points = [[0,0],[1,0],[2,0]]
//    输出：2
//    解释：两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [[1,0],[2,0],[0,0]]
//    示例 2：
//
//    输入：points = [[1,1],[2,2],[3,3]]
//    输出：2
//    示例 3：
//
//    输入：points = [[1,1]]
//    输出：0
//             
//
//    提示：
//
//    n == points.length
//1 <= n <= 500
//    points[i].length == 2
//            -104 <= xi, yi <= 104
//    所有点都 互不相同
//
//    来源：力扣（LeetCode）
//    链接：https://leetcode-cn.com/problems/number-of-boomerangs
//    著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

    public static void main(String[] args) {

    }

//    哈希+枚举
    public int numberOfBoomerangs(int[][] points) {
        Integer result=0;
        int len=points.length;
        for(int i=0;i<len;i++){
            Map<Integer,Integer> map=new HashMap<>();
            for(int j=0;j<len;j++){
                if(i==j){
                    continue;
                }
                int x=points[i][0]-points[j][0];
                int y=points[i][1]-points[j][1];
                Integer value=x*x+y*y;
                int count= map.getOrDefault(value,0);
                count++;
                map.put(value,count);
            }
            for(Integer key:map.keySet()){
                Integer count=map.get(key);
                result+=count*(count-1);
            }
        }
        return result;
    }
}
